package Ep05_StackAndQueue._0225;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author Jimmy Zhan WORKSTATION
 * @date 2023/4/12 8:49
 * 说明：
 */

public class DoubleQueue {
    Queue<Integer> queue1;
    Queue<Integer> queue2;

    public DoubleQueue(){
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }

    // 1. push：需要从队列尾部插入，借助辅助队列交换queue1和queue2
    public void push(int x) {
        queue2.offer(x);
        while (!queue1.isEmpty()) {
            queue2.offer(queue1.poll());
        }

        Queue<Integer> qTemp;
        qTemp = queue1;
        queue1 = queue2;
        queue2 = qTemp;
    }

    // 2. pop：返回并移除栈顶元素，其实就是poll()
    public int pop() {
        return queue1.poll();
    }

    // 3. top：返回栈顶元素，其实就是peek()
    public int top() {
        return queue1.peek();
    }

    // 4. empty：判断栈是否为空，其实就是isEmpty()
    public boolean empty() {
        return queue1.isEmpty();
    }
}
